//////////////////////////////////////////////////////////////////////////////
//       Copyright (c) 2003 - RealTime Gaming.  All rights reserved.        //
//////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////
// Includes
//////////////////////////////////////////////////////////////////////////////
#include "LocaleFormatter.h"

//////////////////////////////////////////////////////////////////////////////
// Namespaces
//////////////////////////////////////////////////////////////////////////////
using namespace Library;

//****************************************************************************
// DollarValueEnglish Class
//****************************************************************************

//////////////////////////////////////////////////////////////////////////////
/// Default Constructor
//////////////////////////////////////////////////////////////////////////////
DollarValueEnglish::DollarValueEnglish() : m_nValue(0)
{
}

//////////////////////////////////////////////////////////////////////////////
/// Destructor
//////////////////////////////////////////////////////////////////////////////
DollarValueEnglish::~DollarValueEnglish()
{
}

//////////////////////////////////////////////////////////////////////////////
/// @param string	String in which the result of the format will be placed.
//////////////////////////////////////////////////////////////////////////////
void 
DollarValueEnglish::Format( String& string )
{
	//@todo: HACK: 
	int32 iDollars = (int32)m_nValue/100;
	int32 iCents = m_nValue - iDollars*100;

	string.sprintf("$%d.%s%d", iDollars, iCents > 9 ? "" : "0", iCents);
}

//////////////////////////////////////////////////////////////////////////////
/// @param nValue   Dollar value to set.
//////////////////////////////////////////////////////////////////////////////
void
DollarValueEnglish::SetValue( int32 nValue )
{
    m_nValue = nValue;
}

//****************************************************************************
// StringValueEnglish Class
//****************************************************************************

//////////////////////////////////////////////////////////////////////////////
/// Default Constructor
//////////////////////////////////////////////////////////////////////////////
StringValueEnglish::StringValueEnglish()
{
}

//////////////////////////////////////////////////////////////////////////////
/// Destructor
//////////////////////////////////////////////////////////////////////////////
StringValueEnglish::~StringValueEnglish()
{
}

//////////////////////////////////////////////////////////////////////////////
/// @param string	String in which the result of the format will be placed.
//////////////////////////////////////////////////////////////////////////////
void 
StringValueEnglish::Format( String& string )
{
	string = m_sValue;
}

//////////////////////////////////////////////////////////////////////////////
/// @param nValue   Dollar value to set.
//////////////////////////////////////////////////////////////////////////////
void
StringValueEnglish::SetValue( const String& sValue )
{
    m_sValue = sValue;
}

//****************************************************************************
// LocaleFormatter Class
//****************************************************************************

//////////////////////////////////////////////////////////////////////////////
/// Default Constructor
//////////////////////////////////////////////////////////////////////////////
LocaleFormatter::LocaleFormatter()
{    
	// Hard coded to english for now
	m_code = "EN";
}

//////////////////////////////////////////////////////////////////////////////
/// Destructor
//////////////////////////////////////////////////////////////////////////////
LocaleFormatter::~LocaleFormatter()
{
}

//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
String 
LocaleFormatter::GetCurrentLanguageCode()
{
    return m_code;
}

void
LocaleFormatter::SetCurrentLanguageCode(const String& code)
{
    m_code = code;
}

//////////////////////////////////////////////////////////////////////////////
/// @return LocaleValue     Pointer to a new locale value object.
///
/// @param  type            Type of value to create, should be of the 
///                          eValueType enumeration.
///
/// This is the main class factory method of the Locale Formatter object.
/// NOTE: In the future, support for different languages will be added here.
//////////////////////////////////////////////////////////////////////////////
LocaleValue* 
LocaleFormatter::CreateValue( ValueTypes type )
{
    LocaleValue *pRetVal = 0;

    switch( type )
    {
        case eString:
            pRetVal = new StringValueEnglish();
            break;

        case eCurrency:
            pRetVal = new DollarValueEnglish();
            break;

        default:
            ASSERT(false);
            break;
    }

    return pRetVal;
}